﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MailServer.Client {
    /// <summary>
    /// Clase para el envio y revision de correos...
    /// </summary>
    public class Client {
        private string _usuario;
        private Server.Server _server;

        public string Usuario {
            get {
                return _usuario;
            }
        }

        public Server.Server Server {
            get {
                return _server;
            }
        }

        public Client(string usuario) {
            _usuario = usuario;
            _server = new Server.Server();
        }

        public Client(Server.Server server, string usuario) {
            _server = server;
            _usuario = usuario;
        }

        /// <summary>
        /// Metodo que consulta al servidor al fin de ver si el usuario tiene algun mensaje
        /// </summary>
        /// <returns>retorna la cantidad de mensajes que tiene el usuario</returns>
        public int CheckMessages() {
            return Server.GetMessageWaiting(Usuario);
        }

        /// <summary>
        /// Metodo que obtiene el siguiente mensaje del servidor y muestra el mensaje al usuario
        /// </summary>
        /// <returns>Si existe devuelve el siguiente mensaje leido, sino, returna null</returns>
        public Message ReadNextMessage() {
            return Server.GetNextMessage(Usuario);
        }

        /// <summary>
        /// Metodo que obtiene la informacion necesaria del usuario, crea un objteo de tipo message y lo envia al servidor
        /// </summary>
        /// <param name="to">Usuario destinatario</param>
        /// <param name="subject"></param>
        /// <param name="body"></param>
        public void SendMessage(string to, string subject, string body) {
            Message m = new Message();
            m.Body = body;
            m.From = Usuario;
            m.Status = 1;
            m.Subject = subject;
            m.To = to;
            Server.Post(m);
        }
    }
}
